home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MYUTIL / GETMPB.M < prev    next >
Encoding:
Text File  |  1991-04-25  |  3.8 KB  |  3 lines

  1. ⓪ MODULE GetMPB;⓪ (*$E MOS *)⓪ ⓪ FROM MOSCtrl IMPORT ProcessID;⓪ FROM SYSTEM IMPORT ASSEMBLER, ADDRESS, LONGWORD;⓪ FROM Console IMPORT WriteString, WriteLn, Read;⓪ FROM StrConv IMPORT LHexToStr;⓪ ⓪ TYPE P_MD = POINTER TO MD;⓪%⓪%MD = RECORD⓪,next: P_MD;⓪,start: ADDRESS;⓪,length: LONGCARD;⓪,owner: LONGWORD⓪*END;⓪ ⓪%P_MPB = POINTER TO MPB;⓪%⓪%MPB = RECORD⓪-free: P_MD;⓪-used: P_MD;⓪-boomer: P_MD⓪+END;⓪ ⓪ ⓪ VAR MPBPtr: P_MPB;⓪ ⓪$ch: CHAR;⓪ ⓪ CONST   end_os = $4FA;⓪ ⓪ BEGIN⓪"ASSEMBLER⓪(; Malloc (2)⓪(MOVEQ   #2,D0⓪(MOVE.L  D0,-(A7)⓪(MOVE    #$48,-(A7)⓪(TRAP    #1⓪(ADDQ.L  #6,A7⓪(MOVE.L  D0,-(A7)⓪(⓪(CLR.L   -(A7)⓪(MOVE    #$20,-(A7)      ; Super (0)⓪(TRAP    #1⓪(MOVE.L  D0,2(A7)⓪(⓪(MOVE.L  $4F2,A0         ; ^TOS-Header⓪(MOVE.L  8(A0),A0        ; wg. altem AHDI⓪(CMPI.B  #$03,2(A0)⓪(BEQ.W   error           ; erstmal nicht bei TT wg. Fast-RAM⓪(⓪(LEA     $800,A0⓪(MOVE.L  end_os,D1⓪(SUB.L   A0,D1⓪(LSR     #1,D1           ; D1: Anzahl zu suchender Words⓪(⓪(; *** nach dem MD suchen ***⓪(⓪(MOVE.L  6(A7),D0        ; zu suchender 'start'⓪(MOVE.L  ProcessID,A2⓪(MOVE.L  (A2),D2         ; zu suchender 'owner'⓪(⓪(CLR.L   -(A7)           ; Flag: bisher nix gefunden⓪(⓪$l1: CMP.W   (A0)+,D0⓪(DBEQ    D1,l1⓪(BNE     e1⓪(CMP.L   -4(A0),D0       ; stimmt 'start'?⓪(DBEQ    D1,l1⓪(BNE     e1⓪(CMPI.L  #2,(A0)         ; stimmt 'length'?⓪(DBEQ    D1,l1⓪(BNE     e1⓪(CMP.L   4(A0),D2        ; stimmt 'owner'?⓪(DBEQ    D1,l1⓪(BNE     e1⓪(⓪(; *** MD gefunden ***⓪(⓪(TST.L   (A7)+⓪(BNE     error           ; mehrfach gefunden -> Abbruch⓪(⓪(LEA     -8(A0),A1⓪(MOVE.L  A1,-(A7)        ; Adr. des MD merken⓪(⓪(DBRA    D1,l1           ; weitersuchen⓪ ⓪$e1: MOVE.L  (A7)+,A1⓪(MOVE.L  A1,D2⓪(BEQ     error           ; nicht gefunden⓪(⓪(; *** nach möglichen MPBs suchen ***⓪(⓪(LEA     $800,A0⓪(MOVE.L  end_os,D1⓪(SUB.L   A0,D1⓪(LSR     #1,D1           ; D1: Anzahl zu suchender Words⓪(⓪(CLR.L   -(A7)           ; Endmarke f. gefundene Adressen⓪(⓪$l2: CMP.W   (A0)+,D2⓪(DBEQ    D1,l2⓪(BNE     e2⓪(CMP.L   -4(A0),D2       ; steht ^MD in MPB.used?⓪(DBEQ    D1,l2⓪(BNE     e2⓪(; einen haben wir...⓪(PEA     -8(A0)⓪(DBRA    D1,l2           ; weitersuchen⓪(⓪$e2: ⓪(; *** Bereich wieder freigeben. Dann ***⓪(; *** steht in MPB.used der ^MD.next ***⓪(⓪(MOVE.L  (A1),-(A7)      ; MD.next merken⓪(MOVE.L  D0,-(A7)⓪(MOVE    #$49,-(A7)      ; Mfree()⓪(TRAP    #1⓪(ADDQ.L  #6,A7⓪(MOVE.L  (A7)+,D2        ; MD.next⓪(⓪(; *** nochmal die mögl. MPBs prüfen ***⓪(⓪$l3: MOVE.L  (A7)+,D0        ; ^MD⓪(BEQ     e3⓪(MOVE.L  D0,A0⓪(CMP.L   4(A0),D2        ; MBP.used = MD.next?⓪(BNE     l3⓪(TST.L   MPBPtr⓪(BNE     err2            ; mehrfach gefunden -> Abbruch⓪(; *** MPB gefunden ***⓪(MOVE.L  A0,MPBPtr⓪(BRA     l3              ; weitersuchen⓪(⓪"err2: TST.L   (A7)+⓪(BNE     err2⓪(CLR.L   MPBPtr⓪ ⓪$e3: TRAP    #1              ; Super (SSP)⓪(ADDQ.L  #6,A7⓪(BRA     ende⓪(⓪!error: TRAP    #1              ; Super (SSP)⓪(ADDQ.L  #6,A7⓪(MOVE    #$49,-(A7)      ; Mfree()⓪(TRAP    #1⓪(ADDQ.L  #2,A7⓪(CLR.L   MPBPtr⓪ ⓪"ende: ADDQ.L  #4,A7           ; Adr. vom angeforderten Block vom Stack⓪"END;⓪"WriteString ('MPBPtr: ');⓪"WriteString (LHexToStr (MPBPtr, 7));⓪"WriteLn;⓪"Read (ch)⓪ END GetMPB.⓪ ə
  2. (* $FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54Ç$000001ADT.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$0000089F$0000075B$0000076B$0000077B$0000078A$0000080A$0000085A$0000089F$000006DD$000007FD$0000082E$00000884$00000A86$000001AD$000001F0$00000380ÇÇé*)
  3.